home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / about.arc / ABOUT.C next >
Text File  |  1985-07-06  |  3KB  |  122 lines

  1. /*  about.c
  2. *
  3. *   Usage:           about  <name>  [<catfile>]
  4. *
  5. *   Examples:        about calloc
  6. *                    about *
  7. *                    about * b:c.cat
  8. *                    about fourier b:math.dat
  9. *                     
  10. *    Description:    For each line in <catfile> beginning as ":<name>",
  11. *                    successive lines are displayed until the next line
  12. *                    begins with ":";  if <name> is *, all entries are
  13. *                    displayed;  <catfile> defaults to "about.dat".
  14. *    
  15. *    Purpose:        The file about.dat contains synopses of C functions,
  16. *                    thus making "about" an elementary "help facility".  
  17. *
  18. *                    However, <catfile> may be any list of :<name>'s of
  19. *                    interest, with each name on a separate line, and
  20. *                    each followed by its respective text to be displayed.
  21. *
  22. *    Limitations:    A simple linear search is used, so probably no more
  23. *                    than a few hundred names can be handled usefully.
  24. *
  25. *    Language:       C (DeSmet 2.4)
  26. *
  27. *    Author:         R. E. Sawyer
  28. *                    3620 Spencer St. 30, Torrance, CA 90503
  29. *                    1 Jan 85
  30. */
  31.  
  32. #define CATFILE "about.dat"
  33. #define DEFCHAR ':'
  34. #define BUFLEN 82
  35.  
  36. int fin;
  37.  
  38. main(ac, av)
  39.     int ac;
  40.     char *av[];
  41.     {
  42.     char *catfile;
  43.     char buf[BUFLEN];
  44.     int showall;
  45.     int done;
  46.     int more;
  47.  
  48.     showall = 0;
  49.     done = 0;
  50.  
  51.     if ((ac < 2) || (ac > 3))
  52.         {
  53.         printf("\nUsage:    about  <name>  [<catfile>]\n");
  54.         printf("\nFor each line in <catfile> beginning as \":<name>\",");
  55.         printf("\nsuccessive lines are displayed until the next line");
  56.         printf("\nbegins with \":\";  if <name> is *, all entries are");
  57.         printf("\ndisplayed;  <catfile> defaults to \"about.dat\".\n");
  58.         exit();
  59.         }
  60.     else if (ac == 2)
  61.         {
  62.         if ((fin = fopen(catfile = CATFILE, "r")) == 0)
  63.             {
  64.             printf("\n---File %s not found", catfile);
  65.             exit();
  66.             }
  67.         }
  68.     else if (ac ==3)
  69.         {
  70.         if ((fin = fopen(catfile = av[2], "r")) == 0)
  71.             {
  72.             printf("\n---File %s not found", catfile);
  73.             exit();
  74.             }
  75.         }
  76.     if (*av[1] == '*')
  77.         showall = 1;
  78.     printf("\n(Catalogue file:  %s)\n\n", catfile);
  79.     more = fgets(buf, BUFLEN - 1, fin);
  80.     while (more)
  81.         {
  82.         if ((buf[0] == DEFCHAR)
  83.             && ((comp(av[1], buf + 1) == 0) || showall))
  84.             {
  85.             more = print_text(buf);
  86.             if (!showall)
  87.                 {
  88.                 done = 1;
  89.                 break;
  90.                 }
  91.             }
  92.         else
  93.             more = fgets(buf, BUFLEN - 1, fin);
  94.         }
  95.     if ((done != 1) && !showall)
  96.         printf("\"%s\" is not catalogued\n\n", av[1]);
  97.     fclose(fin);
  98.     }
  99.     
  100. int comp(s, t)
  101.     char *s, *t;
  102.     {
  103.     int i;
  104.  
  105.     for (i = 0; (t[i] > ' ') && (t[i] <= '~'); ++i)
  106.         ;
  107.     t[i] = '\0';
  108.     return strcmp(s, t);
  109.     }
  110.  
  111. int print_text(buf)
  112.     char buf[];
  113.     {
  114.     int more;
  115.     printf("%s:\n", &buf[1]);
  116.     while (((more = fgets(buf, BUFLEN - 1, fin)) != 0)
  117.         && (buf[0] != DEFCHAR))
  118.         {
  119.         puts(buf);
  120.         }
  121.     return more;
  122.     }